"""
1. 导入socket模块
2. 创建socket套接字
3. 建立tcp连接（和服务端建立连接）
4. 开始发送数据（到服务端）
5. 关闭套接字
"""
# 1. 导入socket模块
import socket

# 2. 创建socket套接字
# 参数1：地址类型：AddressFamily：
#       AF_INET IPv4
#       AF_INET6 IPv6
# 参数2：协议类型：
#       SOCK_STREAM TCP
#       SOCK_DGRAM UDP
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 3. 建立tcp连接（和服务端建立连接） connect
# 参数('127.0.0.1', 8080)是服务器的(ip,port)元组
ip_port = ('127.0.0.1', 8080)
tcp_client_socket.connect(ip_port)

# 4. 开始发送数据（到服务端） send
# tcp_client_socket.send('hello123') # 不能直接发字符串，要发字节数组
tcp_client_socket.send("你好，我是UTF-8".encode('utf-8'))
# tcp_client_socket.send("你好，我是默认编码".encode())
# tcp_client_socket.send("你好，我是GBK编码".encode("GBK"))

# 等待服务器回复消息. recv
# 代码会在这里阻塞，直到服务器回复消息.自动释放阻塞
# 参数：设置缓冲区大小2048字节，一次性最大接收2048个字节
recv_data = tcp_client_socket.recv(2048)
print("收到服务器返回：", recv_data.decode("GBK"))

print("---------------------------")

# 5. 关闭套接字
tcp_client_socket.close()